Ray tracing involves a technique for determining a visibility of an object or objects from a given point, such as but not limited to an “eye” or “camera” point, by following a ray. Current interactive ray tracing implementations are based on the assumption that a complete scene description, including all geometric objects, is known and stored in memory, such that a complete acceleration structure (e.g. a data tree structure hierarchy) may be built as a pre-processing operation. This complete acceleration structure is subsequently used for accelerating ray tracing queries.
For static scenes, the acceleration structure is often built once for a first frame and re-used for all further frames. For dynamic scenes, the acceleration structure either has to be fully rebuilt per frame or, if possible, updated to account for changes. The basic presumption of current interactive applications using rasterization on graphic processing units (GPUs) is that all scene geometry exists in some global location.
Such presumption is not necessarily always correct. For example, vertex programs may be used to perform animation, and therefore, the actual position of vertices may not necessarily be known until after transformation. Furthermore, future applications may utilize geometry shaders to create geometry during rendering (e.g. for displacement mapping).
In this case, not even a number of primitives may be known before rendering. Thus, the traditional approach to ray tracing is not necessarily a good fit to current or future rendering paradigms. There is thus a need for addressing these and/or other issues associated with the prior art.